In [1]:
    
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import medfilt
import gitInformation
from neo.io import NeuralynxIO
    
In [2]:
    
% matplotlib inline
    
In [3]:
    
gitInformation.printInformation()
    
    
In [4]:
    
# Session folder with all needed neuralynx files
sessionfolder = 'C:\\Users\\Dominik\\Documents\\GitRep\\kt-2015-DSPHandsOn\\MedianFilter\\Python\\07. Real Data\\Figure'
    
In [5]:
    
# Loading the files with all datas and store them as a np.array
NIO = NeuralynxIO(sessiondir = sessionfolder, cachedir = sessionfolder)
block = NIO.read_block()
seg = block.segments[0]
analogsignal = seg.analogsignalarrays[0]
    
In [6]:
    
csc = analogsignal.magnitude
    
In [7]:
    
plt.plot(csc)
plt.savefig('realdata.png', dpi = 400)
    
    
Filter data with different window lenghts.
In [8]:
    
filtered1 = medfilt(csc,25)
new_data1 = csc-filtered1
    
In [9]:
    
filtered2 = medfilt(csc,35)
new_data2 = csc-filtered2
    
In [10]:
    
filtered3 = medfilt(csc,45)
new_data3 = csc-filtered3
    
In [11]:
    
filtered4 = medfilt(csc,55)
new_data4 = csc-filtered4
    
In [12]:
    
filtered5 = medfilt(csc,95)
new_data5 = csc-filtered5
    
Calculate the threshold for each filtered data
In [13]:
    
threshold1 = 4*np.median(abs(new_data1)/0.6745)
threshold2 = 4*np.median(abs(new_data2)/0.6745)
threshold3 = 4*np.median(abs(new_data3)/0.6745)
threshold4 = 4*np.median(abs(new_data4)/0.6745)
threshold5 = 4*np.median(abs(new_data5)/0.6745)
threshold6 = 4*np.median(abs(csc)/0.6745)
    
Plot Each data and the threshold
In [14]:
    
plt.figure(figsize=(30,7))
plt.axis([0, 63000, -0.00003, 0.00016])
plt.plot(new_data1, color = 'r')
plt.hlines(threshold1, 0, len(new_data1), color = 'black')
plt.savefig('Threshold.png', dpi = 400)
    
    
In [15]:
    
plt.figure(figsize=(30,7))
plt.axis([0, 63000, -0.00003, 0.00016])
plt.plot(new_data2, color = 'r')
plt.hlines(threshold2, 0, len(new_data1), color = 'black')
plt.savefig('ThresholdWL35.png', dpi = 400)
    
    
In [16]:
    
plt.figure(figsize=(30,7))
plt.axis([0, 63000, -0.00003, 0.00016])
plt.plot(new_data3, color = 'r')
plt.hlines(threshold3, 0, len(new_data1), color = 'black')
plt.savefig('ThresholdWL45.png', dpi = 400)
    
    
In [17]:
    
plt.figure(figsize=(30,7))
plt.axis([0, 63000, -0.00003, 0.00016])
plt.plot(new_data4, color = 'r')
plt.hlines(threshold4, 0, len(new_data1), color = 'black')
plt.savefig('ThresholdWL55.png', dpi = 400)
    
    
In [18]:
    
plt.figure(figsize=(30,7))
plt.axis([0, 63000, -0.00003, 0.00016])
plt.plot(new_data5, color = 'r')
plt.hlines(threshold5, 0, len(new_data1), color = 'black')
plt.savefig('ThresholdWL95.png', dpi = 400)
    
    
Iterate through all the datas and save alle shapes with a higher amplitude then the threshold
In [19]:
    
def threshHold(new_data, threshold):
    count  = -1
    count2 = 0
    timer = 0
    # Dictionary with all thresholded shapes
    thresholds = {}
    # Get the value in the new_data array:
    for i in new_data:
        # Increment the counter (counter = position in the array)
        count += 1
        if i >= threshold:
            # check the thresholded window if some values are bigger then 0.00005
            temp = [i for i in new_data[count -6 : count + 18] if i >= 0.00005]
            # If no values are bigger then 0.00005 and the dead time is zero,
            # save the window in the dictionary 
            if len(temp) == 0 and timer == 0:
                # set the timer to 20, so 20 samples will be passed
                timer = 16
                # increment count2, for the array name
                count2 += 1
                thresholds["spike{0}".format(count2)] = new_data[count -6 : count + 18]
        elif timer > 0: 
            # Decrement the timer.
            timer -= 1
        else: 
            pass
    return thresholds
    
In [20]:
    
thresholds1 = threshHold(new_data1, threshold1)
thresholds2 = threshHold(new_data2, threshold2)
thresholds3 = threshHold(new_data3, threshold3)
thresholds4 = threshHold(new_data4, threshold4)
thresholds5 = threshHold(new_data5, threshold5)
    
In [21]:
    
for i in thresholds1:
    plt.plot(thresholds1[i], color = 'black', linewidth = 0.5)
    plt.xlabel('Window lenght = 25')
    #plt.savefig('Wl25.png', dpi = 400)
    
    
In [22]:
    
for i in thresholds2:
    plt.plot(thresholds2[i], color = 'black', linewidth = 0.5)
    plt.xlabel('Window lenght = 35')
    #plt.savefig('Wl35.png', dpi = 400)
    
    
In [23]:
    
for i in thresholds3:
    plt.plot(thresholds3[i], color = 'black', linewidth = 0.5)
    plt.xlabel('Window lenght = 45')
    #plt.savefig('Wl45.png', dpi = 400)
    
    
In [24]:
    
for i in thresholds4:
    plt.plot(thresholds4[i], color = 'black', linewidth = 0.5)
    plt.xlabel('Window lenght = 55')
    #plt.savefig('Wl55.png', dpi = 400)
    
    
In [25]:
    
for i in thresholds5:
    plt.plot(thresholds5[i], color = 'black', linewidth = 0.5)
    plt.xlabel('Window lenght = 95')
    #plt.savefig('Wl95.png', dpi = 400)